/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Ventas.Controlador;


import CharliesCookies.MainController;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import com.dp1.pucp.Modelo.Clases.Cliente;
import com.dp1.pucp.Modelo.Clases.Documentoventa;
import com.dp1.pucp.Modelo.Clases.Lineapedidoproducto;
import com.dp1.pucp.Modelo.Clases.Moneda;
import com.dp1.pucp.Modelo.Clases.Pedidoproducto;
import com.dp1.pucp.Modelo.Clases.Tipocliente;
import com.dp1.pucp.Seguridad.DAO.LogDAO;
import com.dp1.pucp.Util.Validaciones;

import com.dp1.pucp.Ventas.DAO.*;
import com.dp1.pucp.Ventas.Controlador.*;
import com.dp1.pucp.Ventas.VIsta.*;

import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Lucia
 */
public class DocVentaControlador {
    DocVentaDAO dao;
    DocVentaGUI docVentaGUI;
    
    Documentoventa docVenta = new Documentoventa();
    Cliente cliente = new Cliente();
    
    ArrayList<Tipocliente> tiposcliente = new ArrayList<>();
    ArrayList<Cliente> clientes = new ArrayList<>();
    ArrayList<Moneda> monedas = new ArrayList<>();
    ArrayList<String> estados = new ArrayList<>();
    
    public DocVentaControlador(DocVentaDAO dao, DocVentaGUI docVentaGUI, Documentoventa doc){
        this.dao = dao;
        this.docVentaGUI = docVentaGUI;
        this.docVenta = doc;
        if (docVenta!=null){
            cliente = docVenta.getCliente();
        }
        llenarTiposClientes();
        llenarClientes();
        llenarMonedas();
        llenarEstados();
        
        docVentaGUI.addBuscarPedidosProdListener(new buscarPedidosProdListener(this));
        docVentaGUI.addGuardarDocVentaListener(new guardarDocVentaListener());
        docVentaGUI.addCancelarListener(new CancelarListener());
        
      //  docVentaGUI.llenaComboTipoCliente(tiposcliente);
      //  docVentaGUI.llenaComboMonedas(this.monedas);
        
        docVentaGUI.setFormDocVenta(doc);
                if(doc!=null){
                    ArrayList<Lineapedidoproducto> productos = new ArrayList<>();
                    productos = dao.listarLineasPedidosProd(doc.getPedidoproducto());
                    docVentaGUI.listaLineasPedido(productos);
                    
                }
        
    }
    
    public void setCliente(Cliente c){
        this.cliente = c;
    }
    public void llenaFormulario(Pedidoproducto p){
        docVentaGUI.llenaFormulario(p);
        ArrayList<Lineapedidoproducto> productos = new ArrayList<>();
    
        productos = dao.listarLineasPedidosProd(p);
        docVentaGUI.listaLineasPedido(productos);
       
    }
    
   public void calcularIGV(){
       Float subtotal = docVentaGUI.getTotal();
       Float igv = subtotal * 1;
       Float total = subtotal + (Float)igv;
       
       docVentaGUI.setSubTotal(subtotal);
       docVentaGUI.setIGV(igv);
       docVentaGUI.setTotal(total);
       
       
   }
    class buscarPedidosProdListener implements ActionListener{
        
        DocVentaControlador docVentaControlador;
            
            buscarPedidosProdListener(DocVentaControlador docVentaControlador){
            this.docVentaControlador = docVentaControlador;
            }
        @Override
        public void actionPerformed(ActionEvent e){
            
            BuscarPedidoProdGUI buscar = new BuscarPedidoProdGUI(this.docVentaControlador.docVentaGUI, true);
            BuscarPedidoProdControlador c = new BuscarPedidoProdControlador(dao, buscar, this.docVentaControlador);
            buscar.setVisible(true);
            
        }
        
    }
    
     class guardarDocVentaListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            Documentoventa documento = new Documentoventa();
            
            if (docVentaGUI.getPedidoProducto()==0){
                Validaciones.mostrarMensajeErrorVal("No ha seleccionado ninguna orden de pedido");return;
                       
            }
            documento.setCliente(cliente);
            
            documento.setFechaemision(docVentaGUI.getFechaEmision());
            documento.setFechapago(docVentaGUI.getFechaPago());
            documento.setMoneda(monedas.get(docVentaGUI.getMoneda()));
            documento.setEstado(docVentaGUI.getEstado()-1);
            Pedidoproducto p = dao.getPedidoProducto(docVentaGUI.getPedidoProducto());
            documento.setPedidoproducto(p);
            documento.setCodigo("DOCVENTA");
            
             if (docVentaGUI.getFechaPago()!=null){ // Si ya se puso fecha de pago entonces ya esta pagada
                documento.setEstado(2);
            }
            
            if (docVenta!=null){
                documento.setIddocumentoventa(docVenta.getIddocumentoventa());
            }
            dao.guardarDocVenta(documento);
            LogDAO.insertarLog(MainController.usuario, "Agregar Documento de Venta");
           Validaciones.mostrarMensajeAvisoVal("l documento de venta se registro exitosamente");
            //documento.set(tiposcliente.get(docVentaGUI.getTipoCliente()));
            docVentaGUI.dispose();
            
        }
    }
     
      class CancelarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e){
            docVentaGUI.dispose();
             if (docVenta!=null)
                LogDAO.insertarLog(MainController.usuario, "Salir Editar Documento de Venta");
            else
                LogDAO.insertarLog(MainController.usuario, "Salir Agregar Documento de Venta");
            
        }
    }
      public void llenarTiposClientes(){
          ClienteDAO dao = new ClienteDAO();
          this.tiposcliente = dao.listarTipoCliente();
          docVentaGUI.llenaComboTipoCliente(this.tiposcliente);
      }
      
      public void llenarClientes(){
          ClienteDAO dao = new ClienteDAO();
          this.clientes =  dao.listarCliente(1); //estado 0 porque lista los que estan activos
      }
      
      public void llenarMonedas(){
          this.monedas = this.dao.listarMonedas();
          docVentaGUI.llenaComboMonedas(this.monedas);
      }
      
      public void llenarEstados(){
          this.estados = this.dao.listarEstadoDocVentas();
          docVentaGUI.llenaComboEstados(this.estados);
      }
    
}